home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / ifp1s155.zip / PAGE_10.PAS < prev    next >
Pascal/Delphi Source File  |  1992-04-21  |  6KB  |  277 lines

  1. unit page_10;
  2. interface
  3.  
  4. uses crt, dos, ifpglobl, ifpcomon;
  5.  
  6. procedure page10;
  7.  
  8. implementation
  9.  
  10. procedure page10;
  11.  
  12. var
  13.   i : 1..63;
  14.   xbool1 : boolean;
  15.   xbool2 : boolean;
  16.   xbool3 : boolean;
  17.   xchar : char;
  18.   xword1: word;
  19.   xword2: word;
  20.   regs: registers;
  21.   xbyte: byte;
  22.   count: word;
  23.   s: string;
  24.  
  25. procedure muxint(a : string; b : byte);
  26.   begin
  27.   caption3(a);
  28.   with regs do
  29.     begin
  30.     AH:=b;
  31.     AL:=0;
  32.     BX:=0;
  33.     CX:=0;
  34.     DX:=0;
  35.     Intr($2F, regs);
  36.     case AL of
  37.       $00 : Writeln('no; OK to load');
  38.       $01 : Writeln('no; not OK to load');
  39.       $FF, 2 : Writeln('yes')
  40.       else
  41.         unknown('status', AL, 2)
  42.     end
  43.     end
  44.   end;
  45.  
  46. function windev(device: byte): word;
  47.   var
  48.     regs: registers;
  49.     saveit: word;
  50.  
  51.   begin
  52.   with regs do
  53.     begin
  54.     AX:=$1682;
  55.     Intr($2F, regs);
  56.     AX:=$170A;
  57.     DX:=device;
  58.     Intr($2F, regs);
  59.     windev:=AX
  60.     end
  61.   end;
  62.  
  63.   begin (* procedure page_10 *)
  64.   caption1('');
  65.   Writeln('Multiplex interrupt ($2F)');
  66.   Window(1, 4, twidth div 2, tlength - 2);
  67.   muxint('DOS            ', $12);
  68.   muxint('DRIVER.SYS     ', $08);
  69.   muxint('DISPLAY.SYS    ', $B0);
  70.   muxint('ANSI.SYS       ', $1A);
  71.   muxint('EGA.SYS        ', $BC);
  72.   muxint('PRINT          ', $01);
  73.   muxint('ASSIGN         ', $06);
  74. (*
  75. **  Byte 12:12 p. 176C, Duncan, and many others, all of whom mistakenly give
  76. **  AH = $02
  77. *)
  78.   muxint('SHARE          ', $10);
  79. (*  muxint('FASTOPEN       ', $xx);*)
  80.   muxint('NLSFUNC        ', $14);
  81.   muxint('GRAFTABL (4.0-)', $B0);
  82.   caption3('GRAFTABL (5.0+)');
  83.   with regs do
  84.     begin
  85.     AX:=$2300;
  86.     BX:=0;
  87.     CX:=0;
  88.     DX:=0;
  89.     Intr($2F, regs);
  90.     if AH=$FF then
  91.       Writeln('yes')
  92.     else
  93.       Writeln('no; OK to load');
  94.     end;
  95. (*  muxint('KEYB           ', $B8);*)
  96.   muxint('NETBIOS append ', $87);
  97.   muxint('NETBIOS network', $88);
  98. (*  Byte 12:12 p. 180.  PC Tech Journal 3:11 p.104 gives AH = $BB  *)
  99.   muxint('SHELLB         ', $19);
  100.   muxint('XMA2EMS        ', $1B);
  101.   muxint('APPEND         ', $B7);
  102.   muxint('GRAPHICS.COM   ', $15);
  103.   muxint('Crit.err.handlr', $05);
  104.   pause3(-2);
  105.   if endit then
  106.     Exit;
  107.   caption3('CDROM          ');
  108.   with regs do
  109.     begin
  110.     AX:=$1500;
  111.     BX:=0;
  112.     Intr($2F, regs);
  113.     if BX = 0 then
  114.       Writeln('no; OK to load')
  115.     else
  116.       case AL of
  117.         $00 : Writeln('no; OK to load');
  118.         $01 : Writeln('no; not OK to load');
  119.         $FF : begin
  120.               Writeln('yes');
  121.               caption3('  on drives');
  122.               Write(Chr(CX + 65));
  123.               caption3('through');
  124.               Writeln(Chr(CX + BX + 65 - 1))
  125.               end;
  126.       end; {case}
  127.     end;
  128.   caption3('Network        ');
  129.   with regs do
  130.     begin
  131.     AX:=$B800;
  132.     Intr($2F, regs);
  133.     if AL = 0 then
  134.       Writeln('no; OK to load')
  135.     else
  136.       begin
  137.       Write('yes');
  138.       caption3('this is a');
  139.       if BX and $0040 = $40 then
  140.         Writeln('server')
  141.       else
  142.         if BX and $0004 = $4 then
  143.           Writeln('messenger')
  144.         else
  145.           if BX and $0080 = $80 then
  146.             Writeln('receiver')
  147.           else
  148.             if BX and $0008 = $8 then
  149.               Writeln('redirector');
  150.       end;
  151.     end;
  152.   muxint('DOSKEY         ', $48);
  153.   caption3('DOS Extender   ');
  154.   with regs do
  155.     begin
  156.     AX:=$F100;
  157.     BX:=0;
  158.     CX:=0;
  159.     DX:=0;
  160.     Intr($2F, regs);
  161.     if (AL = $FF) and (SI =$444F {DO}) and (DI = $5358 {SX}) then
  162.       Writeln('yes')
  163.     else
  164.       Writeln('no; OK to load');
  165.     end;
  166.   window(1 + twidth div 2, 3, twidth, tlength - 3);
  167.   if osmajor >=4 then
  168.     with regs do
  169.       begin
  170.       AX:=$B700;
  171.       Intr($2F, regs);
  172.       if AL=$FF then
  173.         begin
  174.         caption2('APPEND ');
  175.         AX:=$B706;
  176.         Intr($2F, regs);
  177.         if (BX and 1) = 1 then
  178.           Write('enabled ');
  179.         if (BX and $2000) = $2000 then
  180.           Write('/PATH ');
  181.         if (BX and $4000) = $4000 then
  182.           Write('/E ');
  183.         if (BX and $8000) = $8000 then
  184.           Write('/X');
  185.         Writeln;
  186.         caption2('APPEND path');
  187.         AX:=$B704;
  188.         Intr($2F, regs);
  189.         while Mem[ES:DI] <> 0 do
  190.           begin
  191.           Write(Chr(mem[ES:DI]));
  192.           Inc(DI)
  193.           end;
  194.         Writeln
  195.         end
  196.       end;
  197.   with regs do
  198.     begin
  199.     AX:=$0100;
  200.     intr($2F, regs);
  201.     if AL = $FF then
  202.       begin
  203.       caption2('PRINT queue');
  204.       AX:=$0104;
  205.       intr($2F, regs);
  206.       xbool1:=true;
  207.       xbool2:=false;
  208.       repeat
  209.         xchar:=char(mem[DS : SI]);
  210.         if xchar > #0 then
  211.           begin
  212.           if xbool1 then
  213.             begin
  214.             xbool1:=false;
  215.             Writeln;
  216.             window(2 + twidth div 2, wherey + hi(windmin), twidth, tlength - 3)
  217.             end;
  218.           pause2;
  219.           if endit then
  220.             Exit;
  221.           Write(xchar);
  222.           i:=1;
  223.           xbool3:=false;
  224.           repeat
  225.             xchar:=char(mem[DS : SI + i]);
  226.             if xchar > #0 then
  227.               begin
  228.               Write(xchar);
  229.               inc(i)
  230.               end
  231.             else
  232.               begin
  233.               Writeln;
  234.               xbool3:=true
  235.               end
  236.           until xbool3;
  237.           inc(SI, 64)
  238.           end
  239.         else
  240.           xbool2:=true
  241.       until xbool2;
  242.       if xbool1 then
  243.         Writeln('(empty)');
  244.       AX:=$0105;
  245.       Intr($2F, regs)
  246.       end;
  247.     end;
  248.   if osmajor = 5 then
  249.     begin
  250.     xword1:=MemW[devseg:devofs + $39];
  251.     xword2:=MemW[devseg:devofs + $37];
  252.     if (xword1 <> 0) and (xword2 <> 0) then
  253.       begin
  254.       caption2('SETVER list at ');
  255.       segofs(xword1, xword2);
  256.       Writeln;
  257.       while Mem[xword1:xword2] <> 0 do
  258.         begin
  259.         xbyte:=Mem[xword1:xword2];
  260.         Inc(xword2);
  261.         s:='';
  262.         for count:=xword2 to xword2 + (xbyte - 1) do
  263.           s:=s + Chr(Mem[xword1: count]);
  264.         Inc(xword2, xbyte);
  265.         Write(s, ' ':(14 - Length(s)), Mem[xword1:xword2], decimal);
  266.         zeropad(mem[xword1:xword2 + 1]);
  267.         Writeln;
  268.         pause2;
  269.         if endit then
  270.           Exit;
  271.         Inc(xword2, 2);
  272.         end;
  273.       end
  274.    end;
  275.    end;
  276. end.
  277.